<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>Title</title>
</head>
<body>

</body>
<script>
	// 1- 字面量
	// var obj = {
	//
	// }
	
	// 2- new Object
	// var obj = new Object({b:2});
	// obj.a = 1;
	// obj.b = 100;
	// console.log(obj);
	
	// 3- 构造函数
	// function Box(){
	// 	this.a = 1;
	// 	this.b = 2;
	// }
	// Box.prototype.fn = function(){
	// 	console.log(this)
	// }
	// var obj = new Box();
	// obj.fn();
	
	// 4- 工厂函数
	// 解决创建对象同质问题
	// function fn(obj){
	// 	console.log(obj);
	// }
	// function objCreator(userName,age){
	// 	return {
	// 		userName:userName,
	// 		age:age
	// 	}
	// }
	// fn(objCreator("zhangsan",12));
	// fn(objCreator("lisi",16));
	
	// 5- Object.create: 方法可以以指定对象为原型创建新的对象，同时可以为新的对象设置属性, 并对属性进行描述
	// obj是新的对象，{a:1,b:2}指定的对象
	// var obj = Object.create({a:1,b:2});
	// console.log(obj);
	
	// var obj = {userName:"zhangsan",age:12};
	// var obj2 = Object.create(obj);
	// console.log(obj2.__proto__ === obj);// true
	
	// 5-1- 可以为新的对象设置属性
	// var my = {};
	// var obj = Object.create(my);
	// console.log(obj.__proto__ === my);// true
	// console.log(my.__proto__ === Object.prototype);// true
	// console.log(Object.prototype.__proto__);// null
	// console.log(obj.__proto__.__proto__.__proto__);// null
	// "use strict";
	var my = {a:1}
	// 与字面量对象不同点：
	// 1- 可能指定原型对象
	// 2- 可以对属性进行描述
	var obj = Object.create(my,{
		// 描述对象：描述初始值，描述是否可以遍历，是否可以修改，是否可以删除，可以设置读写
		age:{
			value:100,// 描述初始值
			writable:true,// 描述属性是否可以进行修改（默认为false）
			enumerable:true,// 描述属性是否支持遍历（枚举）枚举：一一列举，默认为false
			configurable:true,// 是否允许删除，默认为false
		}
	});
	// 修改
	// obj.age = 300;
	// console.log(obj.age)
	
	// 遍历
	// for(var key in obj){
	// 	console.log(key)
	// }
	
	// 删除
	delete obj.age;
	console.log(obj);

	
	
</script>
</html>